Introducción a DQL
DQL (Data Query Language) es la parte de SQL especializada en consultar información.
Mientras DDL crea estructuras y DML modifica datos, DQL extrae información útil desde las tablas.
Objetivo de DQL
- Consultar datos.
- Filtrar resultados.
- Analizar información.
- Generar reportes.
- Ayudar en la toma de decisiones.
Consulta básica
SELECT nombre, edad
FROM alumnos
WHERE edad > 18;
Qué ocurre aquí
- SELECT: columnas que queremos ver.
- FROM: tabla origen.
- WHERE: condición de filtrado.
SELECT, FROM y WHERE. Explicación teórica
SELECT
Indica qué columnas se devolverán en el resultado.
SELECT nombre, ciudad
FROM
Define la tabla origen.
FROM clientes
WHERE
Filtra filas concretas según condiciones.
WHERE ciudad = 'Madrid'
Orden lógico interno
| Orden real | Cláusula |
|---|---|
| 1 | FROM |
| 2 | WHERE |
| 3 | SELECT |
Aunque escribimos SELECT primero, SQL evalúa primero FROM.
SELECT, FROM y WHERE. Ejemplos código
Ejemplo 1
SELECT nombre
FROM empleados;
Muestra únicamente la columna nombre.
Ejemplo 2
SELECT nombre, salario
FROM empleados
WHERE salario > 2000;
Devuelve empleados con salario superior a 2000.
Ejemplo 3
SELECT nombre, ciudad
FROM clientes
WHERE ciudad = 'Sevilla';
Filtra clientes de Sevilla.
Ejemplo profesional
SELECT nombre, edad
FROM alumnos
WHERE edad > 18
AND ciudad = 'Madrid';
Explicación
- AND combina condiciones.
- Solo aparecen registros que cumplen ambas.
Operadores
Operadores de comparación
| Operador | Significado |
|---|---|
| = | Igual |
| > | Mayor |
| < | Menor |
| <> | Distinto |
BETWEEN
WHERE salario BETWEEN 2000 AND 4000
Filtra valores dentro de un rango.
IN
WHERE ciudad IN ('Madrid','Barcelona')
LIKE
WHERE nombre LIKE 'A%'
Busca patrones de texto.
Operadores lógicos
- AND
- OR
- NOT
Conclusión del trío base de DQL
| Cláusula | Función |
|---|---|
| SELECT | Elegir columnas |
| FROM | Elegir tabla |
| WHERE | Aplicar filtros |
Consulta completa
SELECT nombre, salario
FROM empleados
WHERE salario > 2500;
Con estas tres cláusulas ya pueden construirse muchísimas consultas reales.
Funciones agregadas
Las funciones agregadas resumen conjuntos de datos.
Principales objetivos
- Calcular promedios.
- Contar registros.
- Encontrar máximos.
- Obtener mínimos.
- Sumar cantidades.
Ejemplo
SELECT AVG(salario)
FROM empleados;
Calcula el salario medio.
GROUP BY
SELECT departamento, AVG(salario)
FROM empleados
GROUP BY departamento;
Agrupa empleados por departamento.
Las principales funciones agregadas
| Función | Uso |
|---|---|
| COUNT() | Cuenta registros |
| SUM() | Suma valores |
| AVG() | Calcula promedio |
| MIN() | Valor mínimo |
| MAX() | Valor máximo |
COUNT
SELECT COUNT(*)
FROM clientes;
SUM
SELECT SUM(total_venta)
FROM ventas;
HAVING
SELECT ciudad, SUM(total_venta)
FROM ventas
GROUP BY ciudad
HAVING SUM(total_venta) > 5000;
HAVING filtra grupos ya agrupados.
Subconsultas básicas
Una subconsulta es una consulta dentro de otra consulta.
Ejemplo clásico
SELECT nombre
FROM empleados
WHERE salario > (
SELECT AVG(salario)
FROM empleados
);
Qué ocurre
- La subconsulta calcula el salario medio.
- La consulta principal compara salarios.
Ventaja
Permiten resolver problemas complejos con una sola instrucción SQL.
Clasificación de las subconsultas
Subconsulta escalar
Devuelve un único valor.
WHERE salario > (
SELECT AVG(salario)
FROM empleados
)
Subconsulta de conjunto
Devuelve varias filas o columnas.
WHERE id_cliente IN (
SELECT id_cliente
FROM pedidos
)
Ubicaciones posibles
- WHERE
- FROM
- SELECT
Subconsulta en FROM
SELECT ciudad, AVG(total)
FROM (
SELECT ciudad, total_venta AS total
FROM ventas
) AS ventas_totales
GROUP BY ciudad;
Beneficios de las subconsultas
- Permiten análisis avanzados.
- Reducen código repetido.
- Facilitan consultas complejas.
- Evitan crear tablas temporales.
- Ayudan en Business Intelligence.
Aplicaciones reales
- Encontrar empleados mejor pagados.
- Detectar productos más vendidos.
- Analizar ventas por región.
- Comparar resultados respecto a medias.
Ejemplos de código explicados
Empleado mejor pagado
SELECT nombre, departamento
FROM empleados
WHERE salario = (
SELECT MAX(salario)
FROM empleados
);
Explicación
- MAX obtiene el salario máximo.
- La consulta principal busca coincidencias.
Clientes con pedidos
SELECT nombre
FROM clientes
WHERE id_cliente IN (
SELECT id_cliente
FROM pedidos
);
Ciudades con ventas altas
SELECT ciudad, SUM(total_venta)
FROM ventas
GROUP BY ciudad
HAVING SUM(total_venta) > 10000;
Errores típicos
- Olvidar GROUP BY.
- Usar HAVING incorrectamente.
- No usar alias.
- Confundir WHERE con HAVING.